﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace VideoLink.Streams
{
    /// <summary>
    /// Диалог, запрашивающий у пользователя шаблон, описывающий последовательность файлов.
    /// </summary>
    /// <remarks>
    /// Данный диалог использует Settings для запоминания последнего выбранного шаблона.
    /// </remarks>
    public partial class TemplateRequestDialog : Form
    {
        /// <summary>
        /// Запросить шаблон у пользователя.
        /// При этом в поле ввода будет указан предыдущий выбранный шаблон.
        /// </summary>
        /// <returns>
        /// Строка-шаблон, если пользователь выбрал корректный шаблон,
        /// null в противном случае.
        /// </returns>
        public static string RequestTemplate()
        {
            var form = new TemplateRequestDialog();
            return (form.ShowDialog() == DialogResult.OK) ?
                form.pathTB.Text
                : null;
        }

        /// <summary>
        /// Создать экземпляр класса по умолчанию.
        /// </summary>
        private TemplateRequestDialog()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Обработчик события клика кнопки выбора пути.
        /// </summary>
        /// <param name="sender">-</param>
        /// <param name="e">-</param>
        private void searchB_Click(object sender, EventArgs e)
        {
            folderBrowserDialog.SelectedPath = Path.GetDirectoryName(pathTB.Text);

            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                pathTB.Text = folderBrowserDialog.SelectedPath + "\\"
                    + Path.GetFileName(pathTB.Text);
        }

        /// <summary>
        /// Обработчик события клика кнопки приятия выбранного шаблона.
        /// Если шаблон корректен (корректен формат и существует путь, 
        /// полученный подстановкой в шаблон нуля), то форма закрывается,
        /// иначе выдаётся сообщение об ошибке.
        /// </summary>
        /// <param name="sender">-</param>
        /// <param name="e">-</param>
        private void okB_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
            try
            {
                if (!File.Exists(String.Format(pathTB.Text, 0)))
                    DialogResult = DialogResult.Cancel;
            }
            catch (FormatException)
            {
                Utility.DebugLog.Instance.WriteLine("Пользователь выбрал некорректный шаблон: " + pathTB.Text);
                DialogResult = DialogResult.Cancel;
            }

            if (DialogResult == DialogResult.OK)
                Close();
            else
                Utility.Utils.ShowError("Выбран некорректный шаблон:\n"
                    + pathTB.Text, "Ошибка!");
        }

        private void cancelB_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }
    }
}
